;
; Esqueleto para programas em assembly (NASM)
; Plataforma alvo: arquivos objetos (OBJ/EXE) 16-bit (DOS)
;
; montar com a opcao -fobj
;


SEGMENT code                ; segmento de codigo
..start:                    ; ponto de entrada do programa
 
  mov  ax, data             ; inicializa DS
  mov  ds, ax

  mov  ax, stack            ; inicializa pilha (SS:SP)
  mov  ss, ax
  mov  sp, stacktop

;
; SEU CODIGO A PARTIR DAQUI
;
mov ah, 1     ;comando de leitura
int 0x21      ;executa comando em dos

mov dh,al     ;manda primeiro digito para dh

int 0x21      ;leitura do segundo digito

mov dl,al     ;manda segundo digito para dl

mov ah,2      ;comando de impressao

cmp dl, 0x30  ;compara com o valor ascii do char '0'
jb caracinv   ;se for char invalido

cmp dl, 0x39  ;compara com o valor ascii do char '9'
ja caracinv   ;se for char invalido

cmp dh, 0x30  ;compara com o valor ascii do char '0'
jb caracinv   ;se for char invalido

cmp dh, 0x39  ;compara com o valor ascii do char '9'
ja caracinv   ;se for char invalido

sub dh,0x30   ;transforma em int
sub dl,0x30   ;transforma em int

mov al,dh     ;manda para AL para poder multiplicar
;mul 0x0a      ;multiplica   <------------Eu quero multiplicar!!!!
shl dh,1
shl al,3
add al,dh
add dl,al     ;soma
mov dh,dl     ;coloca a soma em dh

mov dl,13     ;Fim de linha
int 0x21      ;print
mov dl,10     ;Pula Linha
int 0x21      ;print

mov cx,0x08
jmp passabits



caracinv:
  mov dl,13     ;Fim de linha
  int 0x21      ;print
  mov dl,10     ;Pula Linha
  int 0x21      ;print
  mov dl,0x58  ;caracter X
  int 0x21     ;print
  jmp end

passabits:
  mov dl,dh
  dec cx
  shr dl,cl
  and dl,1
  add dl,0x30
  int 0x21
  cmp cx,0
  jnz passabits

passahexa:
  mov dl,13     ;Fim de linha
  int 0x21      ;print
  mov dl,10     ;Pula Linha
  int 0x21      ;print

  mov dl,dh
  and dl, 0xf0
  and dh, 0x0f
  shr dl, 4

  add dl, 0x30
  cmp dl,0x3A
  jb numeral
    add dl, 0x07
  numeral:
  int 0x21      ;print

  mov dl,dh

  add dl, 0x30
  cmp dl,0x3A
  jb numeral2
    add dl, 0x07
  numeral2:
  int 0x21      ;print
  
end:


  mov  ah, 0x4C             ; volta controle ao DOS
  int  0x21


SEGMENT data                ; segmento de dados
; SEUS DADOS A PARTIR DAQUI


SEGMENT stack stack        ; segmento de pilha
  RESB 256
stacktop:
